<?php
class Aco_Crud
{
    // Configuracion del Grid
    public $conexion = '';
    public $classCSS = '';
    public $pagina = array();
    public $nombreGrid = '';
    // Ruta del Grid
    public $dirGrid = '';
    // Objeto del Grid
    public $objGrid = '';
    // Determina si se activaran todas las opciones del CRUD o no
    private $opcionesCrud = array('Crear' => true,
                                  'Leer' => true,
                                  'Actualizar' => true,
                                  'Borrar' => true);
    private $campos;
    private $clavesCampos;
        
    private $campoPry = '';
       
    // Inicia las funcionalidades de la clase    
    public function iniciar( $sql, $campos )
    {
               
        require_once $this->dirGrid . 'Aco_DataGrid.php';
        $this->objGrid = new Aco_DataGrid;
        // Campos que se quieren visualizar en la tabla
        $this->campos = $campos;
        $this->clavesCampos = array_keys( $this->campos );
        // Se inicia el grid    
        $this->objGrid->iniciar( $sql , $conexion = '',
                                 $campos, $this->classCSS,
                                 $this->pagina, $this->nombreGrid );
    }
    
    /*Object relations model
     * $relacion = array( 'Columna' => array('tablaRelacion' =>
     *                    array( 'campoCompara' => 'ValorFInal' ) )
     *
     *                  )
     */
    public function orm( $relaciones )
    {
        // Se recorren las columnas
        $clavesColumna = array_keys( $relaciones );
        for( $n=0; $n < count( $relaciones ); $n++ ) {
            unset( $cambios );
            // Relaciones de la columna actual
            $rel = $relaciones[ $clavesColumna[ $n ] ];
            // Tabla a la cual se hace la relacion 
            $tabla = current(array_keys( $rel ));
            // Campos de la tabla relacion
            $campo1 = current( array_keys( $rel[ $tabla ] ) );
            $campo2 = current( $rel[ $tabla ] );
            // Se hace la consulta
            $sql = mysql_query("SELECT ". $tabla .'.'. $campo1 .",".
                                          $tabla. '.' . $campo2 ."
                                          FROM ". $tabla)
            or die( mysql_error() );
            while( $info = mysql_fetch_assoc( $sql ) ) {
                $cambios[ $info[ $campo1 ] ] = $info[ $campo2 ];
            }
            $cambios = array( $clavesColumna[ $n ] => $cambios  );
            
            $this->objGrid->add_Relacion( $cambios );
        }
        
        
    }
    // Permite establecer el campo primario que usara el crud como referencia
    // Por defecto usa el primer elemento
    public function pry( $pry )
    {
        $this->campoPry = $pry;
    }
    // Agrega actualizar, ver , editar y borrar al grid
    private function _accionesCrud()
    {
        $crud = $this->opcionesCrud['Leer'] ? '<a href="index.php?leer=&&">Leer</a>&nbsp;' : '';
        $crud .= $this->opcionesCrud['Actualizar'] ? '<a href="index.php?actualizar=&&">Actualizar</a>&nbsp;' : '';
        $crud .= $this->opcionesCrud['Borrar'] ? '<a href="index.php?borrar=&&">Borrar</a>&nbsp;' : '';
              
        $crud = empty( $crud ) ? 'Sin acciones' : $crud;
        if( empty( $this->campoPry ) ) {
            $this->campoPry = current($this->clavesCampos);
        }
        $campo = end( $this->clavesCampos );
        
        $this->objGrid->add_ColumnaDespuesDe( $crud, $this->campoPry , $campo, 'Acciones');
              
        
    }
    // Controla el aspecto por defecto que el grid tendra
    private function _aspectoGrid()
    {
        $this->objGrid->grid_BgColorFC('#5F707C', array('#FFFFFF', '#EEEEEE'));
        $this->objGrid->grid_PacingAndPadding(2,2);
    }
    // Determina si todas las funcionalidades del CRUD estaran activas
    public function opcionesCrud( $opciones = array() )
    {
        $this->opcionesCrud = $opciones;
    }
    // Permite manipular los metodos de la clase 'Aco_DataGrid' para realizar
    // Modificaciones en el grid. 
    public function grid()
    {
        return $this->objGrid;
    }
    // Muestra el resultado final    
    public function crud()
    {
        $this->_aspectoGrid();
        $this->_accionesCrud();
        $this->objGrid->gridMostrar();
        
    }
    
    
}


?>